package com.groupten.Service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.groupten.Entity.QuestionEntity;

import java.util.List;


public interface QuestionService extends IService<QuestionEntity> {
    /**
     * 往题库中添加题目
     * @param question
     * @return 添加是否成功
     */
    Integer insertQuestion(QuestionEntity question);

    /**
     * 根据题目编号删除题目
     * @param QuestionId
     * @return 删除是否成功
     */
    Integer deleteQuestionById(Long QuestionId);

    IPage<QuestionEntity> selectAll(Integer page, Integer limit);

    /**
     * 根据题目编号查找题目
     * @param QuestionID
     * @return 返回题目编号相关题目
     */
    QuestionEntity selectQuestionByID(Long QuestionID);

    /**
     * 根据题目类型查找相关题目
     * @param Type
     * @param page
     * @param limit
     * @return 返回含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionByType(Integer Type,Integer page, Integer limit);

    /**
     * 根据科目类型查找相关题目
     * @param Subject
     * @param page
     * @param limit
     * @return 返回含有相关记录IPage对象
     */
    IPage<QuestionEntity> selectQuestionBySubject(Integer Subject,Integer page, Integer limit);

    /**
     * 根据知识类型查找相关题目
     * @param KnowledgePoint
     * @param page
     * @param limit
     * @return 返回含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionByKnowledgePoint(Integer KnowledgePoint,Integer page, Integer limit);

    /**
     * 根据题目分值查找相关题目
     * @param Score
     * @param page
     * @param limit
     * @return 含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionByScore(Double Score,Integer page, Integer limit);

    /**
     * 根据题目难度查找相关题目
     * @param Level
     * @param page
     * @param limit
     * @return 含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionByLevel(Double Level,Integer page, Integer limit);
    boolean removeDuplicateQuestion(QuestionEntity question);

    /**
     * 根据科目类型和题目类型查找相关题目
     * @param subject 科目类型
     * @param type 题目类型
     * @param page 当前页数
     * @param limit 每页显示的记录数
     * @return 含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionBySubjectAndType(Integer subject, Integer type, Integer page, Integer limit);

    /**
     * 根据知识点和题目类型查找相关题目
     * @param knowledgePoint 知识点
     * @param type 题目类型
     * @param page 当前页
     * @param limit 每页显示的记录数
     * @return 含有相关记录的IPage对象
     */
    IPage<QuestionEntity> selectQuestionByKnowledgePointAndType(Integer knowledgePoint, Integer type, Integer page, Integer limit);

    /**
     * 将List对象转换为IPage对象
     * @param list List对象
     * @param page 当前页
     * @param limit 每页显示的记录数
     * @return IPage对象
     */
    IPage<QuestionEntity> convertListtoIPage(List<QuestionEntity> list, Integer page, Integer limit);



}
